package com.rimi.project.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
       
	/**
	 * 	HttpServletRequest request		简称request
	 * 		
	 * 		request 是客户端发送给服务器的请求
	 * 			1.getParameter 通过参数名，获取客户端提交过来的参数
	 * 			2.setCharacterEncoding 设置字符编码格式,一般统一使用utf-8
	 * 			3.getRequestDispatcher(path) 请求转发，从当前的servlet跳转到另外的servlet
	 * 				path 将要转发的目的地
	 * 
	 * 	HttpServletResponse response	简称response
	 * 			
	 * 		response 是服务器发送给客户端的响应,通常用来发送用户想要的动态页面
	 * 			1.getWriter 给客户端发送数据的输出流，所有展示在页面上的数据，需要写入输出流
	 * 			2.setCharacterEncoding 设置发送给客户端数据的字符编码，推荐统一utf-8
	 * 				设置字符编码，一定要放在最前面
	 * 			3.setContentType 告知浏览器当前数据消息类型和标准
	 * 				   text/html 告知浏览器当前消息类型
	 * 				   charset=utf-8 告知客户端解析数据时，应该使用哪种字符编码解析
	 * 			4.resp.sendRedirect 重定向，告知浏览器，你需要的资源哪里找
	 */
	
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Test");
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		String param = request.getParameter("aaa");
		
		System.out.println(param);
		
		PrintWriter writer = response.getWriter();
		// append 向输出流添加数据
		writer.append(param);
		
		// 允许在java中写html
//		writer.append("<form>");
//		writer.append("<input name='username' />");
//		writer.append("/<form>");
		
		/*
		 *  有两个页面，s1.html,s2.html
		 *  当param = s1,显示s1.html
		 *  当param = s2,显示s2.html	
		 */
		if ("s1".equals(param)) {
			// getRequestDispatcher指定将要前往的目的地
			/*	请求转发，
			 * 		(1)request对象专有 
			 * 		(2)不会改变url地址
			 *  	(3)只能是当前项目内进行跳转
			 *  forward/include 指定前往目的地的方式，forward代表直接跳转，
			 *  
			 *  include代表将目的地的内容包含在原有内容之内
			 */
			writer.append("你好");
			
			request.getRequestDispatcher("/qqq/11").include(request, response);
			
			// 请求转发完会回来的，记得return
			System.out.println("this is test end");
//			response.sendRedirect();
		}else if("s2".equals(param)) {
			/*
			 * 	resp.sendRedirect 重定向
			 * 		重定向特性:
			 * 			(1)response对象专有
			 * 			(2)重定向的目的地，可以是互联网任何一个地址
			 * 			(3)客户端需要发起2次http请求
			 * 		location 代表将要跳转的目的地
			 */
			response.sendRedirect("https://www.baidu.com");
			// 本质上来说，重定向知识在http response header加了一个参数location
			System.out.println("this is test end");
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/s1").forward(request, response);
	}

}
